/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package progweb.project.Manager;

import java.util.Comparator;

/**
 * Classe che fornisce con metodi statici oggetti di tipo Comparator già implementati 
 * @author Valentino Briani
 */
public class ComparatorManager {
    
    /**
     * 
     * @param oggetto 
     * @param attributo
     * @param ordine
     * @return Comparator
     */
    public static Comparator getComparator(String oggetto, String attributo, String ordine) {
        Comparator c=null;
        if (oggetto.equals("Richiamo")) {
            if (attributo.equals("Data")) {
                if (ordine.equals("Crescente"))
                    c=getComparatorOfRichiamiByDataAsc();
                else
                    c=getComparatorOfRichiamiByDataDesc();
            } else if (attributo.equals("Paziente")) {
                if (ordine.equals("Crescente"))
                    c=getComparatorOfRichiamiByPazienteAsc();
                else
                    c=getComparatorOfRichiamiByPazienteDesc();
            } else if (attributo.equals("Medico")) {
                if (ordine.equals("Crescente"))
                    c=getComparatorOfRichiamiByMedicoAsc();
                else
                    c=getComparatorOfRichiamiByMedicoDesc();
            }
        } else if (oggetto.equals("Paziente")) {
            if (attributo.equals("Nome")) {
                if (ordine.equals("Crescente"))
                    c=getComparatorOfPazientiByNomeAsc();
                else
                    c=getComparatorOfPazientiByNomeDesc();
            } else if (attributo.equals("Ultimo richiamo")) {
                if (ordine.equals("Crescente"))
                    c=getComparatorOfPazientiByUltimoRichiamoAsc();
                else
                    c=getComparatorOfPazientiByUltimoRichiamoDesc();
            }
        }
        return c;
    }
    
    /**
     * Metodo che fornisce un Comparator di Pazienti, per ordinarli per nome e cognome in ordine
     * alfabetico crescente
     * @return c: il Comparator
     */
    public static Comparator<Paziente> getComparatorOfPazientiByNomeAsc() {
        Comparator<Paziente> c=new Comparator<Paziente>() {
            @Override
            public int compare(Paziente o1, Paziente o2) {
                return o1.compareTo(o2);
            }
        };
        return c;
    }
    
    /**
     * Metodo che fornisce un Comparator di Pazienti, per ordinarli per nome e cognome in ordine
     * alfabetico decrescente
     * @return c: il Comparator
     */
    public static Comparator<Paziente> getComparatorOfPazientiByNomeDesc() {
        Comparator<Paziente> c=new Comparator<Paziente>() {
            @Override
            public int compare(Paziente o1, Paziente o2) {
                return - o1.compareTo(o2);
            }
        };
        return c;
    }
    
    /**
     * Metodo che fornisce un Comparator di Pazienti, per ordinarli per ultimo richiamo in ordine
     * crescente
     * @return c: il Comparator
     */
    public static Comparator<Paziente> getComparatorOfPazientiByUltimoRichiamoAsc() {
        Comparator<Paziente> c=new Comparator<Paziente>() {
            @Override
            public int compare(Paziente o1, Paziente o2) {
                return o1.getUltimoRichiamo().compareTo(o2.getUltimoRichiamo());
            }
        };
        return c;
    }
    
    /**
     * Metodo che fornisce un Comparator di Pazienti, per ordinarli per ultimo richiamo in ordine
     * decrescente
     * @return c: il Comparator
     */
    public static Comparator<Paziente> getComparatorOfPazientiByUltimoRichiamoDesc() {
        Comparator<Paziente> c=new Comparator<Paziente>() {
            @Override
            public int compare(Paziente o1, Paziente o2) {
                return - o1.getUltimoRichiamo().compareTo(o2.getUltimoRichiamo());
            }
        };
        return c;
    }
    
    /**
     * Metodo che fornisce un Comparator di Richiami, per ordinarli per data in ordine
     * crescente
     * @return c: il Comparator
     */
    public static Comparator<Richiamo> getComparatorOfRichiamiByDataAsc() {
        Comparator<Richiamo> c=new Comparator<Richiamo>() {
            @Override
            public int compare(Richiamo o1, Richiamo o2) {
                return o1.getData().compareTo(((Richiamo)o2).getData());
            }
        };
        return c;
    }
    
    /**
     * Metodo che fornisce un Comparator di Richiami, per ordinarli per data in ordine
     * decrescente
     * @return c: il Comparator
     */
    public static Comparator<Richiamo> getComparatorOfRichiamiByDataDesc() {
        Comparator<Richiamo> c=new Comparator<Richiamo>() {
            @Override
            public int compare(Richiamo o1, Richiamo o2) {
                return - o1.getData().compareTo(((Richiamo)o2).getData());
            }
        };
        return c;
    }
    
    /**
     * Metodo che fornisce un Comparator di Richiami, per ordinarli per Paziente in ordine
     * alfabetico crescente
     * @return c: il Comparator
     */
    public static Comparator<Richiamo> getComparatorOfRichiamiByPazienteAsc() {
        Comparator<Richiamo> c=new Comparator<Richiamo>() {
            @Override
            public int compare(Richiamo o1, Richiamo o2) {
                return o1.getPaziente().compareTo(o2.getPaziente());
            }
        };
        return c;
    }
    
    /**
     * Metodo che fornisce un Comparator di Richiami, per ordinarli per Paziente in ordine
     * alfabetico decrescente
     * @return c: il Comparator
     */
    public static Comparator<Richiamo> getComparatorOfRichiamiByPazienteDesc() {
        Comparator<Richiamo> c=new Comparator<Richiamo>() {
            @Override
            public int compare(Richiamo o1, Richiamo o2) {
                return - o1.getPaziente().compareTo(o2.getPaziente());
            }
        };
        return c;
    }
    
    /**
     * Metodo che fornisce un Comparator di Richiami, per ordinarli per Medico in ordine
     * alfabetico crescente
     * @return c: il Comparator
     */
    public static Comparator<Richiamo> getComparatorOfRichiamiByMedicoAsc() {
        Comparator<Richiamo> c=new Comparator<Richiamo>() {
            @Override
            public int compare(Richiamo o1, Richiamo o2) {
                return o1.getMedico().compareTo(o2.getMedico());
            }
        };
        return c;
    }
    
    /**
     * Metodo che fornisce un Comparator di Richiami, per ordinarli per Medico in ordine
     * alfabetico crescente
     * @return c: il Comparator
     */
    public static Comparator<Richiamo> getComparatorOfRichiamiByMedicoDesc() {
        Comparator<Richiamo> c=new Comparator<Richiamo>() {
            @Override
            public int compare(Richiamo o1, Richiamo o2) {
                return - o1.getMedico().compareTo(o2.getMedico());
            }
        };
        return c;
    }
}
